The Hardware Abstraction Layer, or HAL, is a complex part at a low layer of the Windows® 2000 (or Windows NT®) operating system that abstracts hardware differences among various system architectures from higher layers of software. The HAL enables higher-level operating system components and drivers to communicate with the system hardware without modification, i.e., the HAL enables a single driver to support the same hardware device on multiple platforms. For example, one of the many tasks performed by the HAL is resource translation, wherein on certain (e.g., non-x86) processors that can only read and write in memory cycles, certain CPU-relative memory cycles are translated to bus-relative cycles (I/O or other memory address), and vice-versa, so that devices can respond to (decode) the cycle.
A HAL performs many functions, and a reliable HAL is critical to a properly operating computer machine. It is thus an extremely complex piece of software code to develop. Indeed, the contemporary cost to write, test and debug a HAL may be on the order of several millions of dollars. It is impractical for an operating system vendor to write a new HAL for each new machine that is developed, and machine vendors thus need to fit new machines into one of the broad categories covered by one of the several HAL implementations currently available, or write their own HAL for a machine that is not covered. However, because of the cost and complexity reasons, only a few, very large original equipment manufacturers have attempted to write a HAL to attempt to support a new class of machines, with mixed results. As a result, most equipment manufacturers are limited to providing classes of computer systems that are capable of working with an already-existing HAL. In general, however, manufacturers would like to develop customized machines that are not limited by existing HALs, yet without going through the expensive and unpredictable ordeal of writing a customized HAL for each new customized class of machine.